When inputHandler raises an exception, close stdin and stdout in the
child before attempting to close stderr, which is held open by a
separate thread. Without this patch, exceptions raised by device
migration caused xend to hang on child.childerr.close().
Signed-off-by: Brendan Cully <brendan@cs.ubc.ca>
log.debug('%s', line)
inputHandler(line, child.tochild)
- thread.join()
-
except IOError, exn:
raise XendError('Error reading from child process for %s: %s' %
(cmd, exn))
finally:
child.fromchild.close()
- child.childerr.close()
if not closeToChild:
child.tochild.close()
+ thread.join()
+ child.childerr.close()
+ status = child.wait()
- status = child.wait()
if status >> 8 == 127:
raise XendError("%s failed: popen failed" % string.join(cmd))
elif status != 0: